﻿#ifndef  __DAME3000_LIB__
#define __DAME3000_LIB__

#include <windows.h>

// 模拟量输入类型(电压类型) 供DAME3000_SetModeAD函数中的nADMode参数使用
#define DAME3000_VOLT_N15_P15					0x01	//  -15～+15mV
#define DAME3000_VOLT_N50_P50					0x02	//  -50～+50mV
#define DAME3000_VOLT_N100_P100					0x03	// -100～+100mV
#define DAME3000_VOLT_N150_P150					0x04	// -150～+150mV
#define DAME3000_VOLT_N500_P500					0x05	// -500～+500mV
#define DAME3000_VOLT_N1_P1						0x06	//   -1～+1V
#define DAME3000_VOLT_N25_P25					0x07	// -2.5～+2.5V
#define DAME3000_VOLT_N5_P5						0x08	//   -5～+5V
#define DAME3000_VOLT_N10_P10					0x09	//  -10～+10V
#define DAME3000_VOLT_N0_P5						0x0D	//    0～+5V
#define DAME3000_VOLT_N0_P10					0x0E	//    0～+10V
#define DAME3000_VOLT_N0_P25					0x0F	//    0～+2.5V

// 模拟量输入类型(电流类型) 供DAME3000_SetModeAD函数中的nADMode参数使用
#define DAME3000_CUR_N0_P10						0x00	//   0～10mA
#define DAME3000_CUR_N20_P20					0x0A	// -20～+20mA
#define DAME3000_CUR_N0_P20						0x0B	//   0～20mA
#define DAME3000_CUR_N4_P20						0x0C	//   4～20mA

// 模拟量输入类型(热电阻类型) 供DAME3000_SetModeAD函数中的nADMode参数使用
#define DAME3000_RTD_CU50						0x40	// Cu50热电阻        -50℃～150℃
#define DAME3000_RTD_CU100						0x41	// Cu100热电阻       -50℃～150℃
#define DAME3000_RTD_PT100_385_N200_P850        0x20	// Pt100(385)热电阻 -200℃～850℃
#define DAME3000_RTD_PT100_385_N100_P100        0x21	// Pt100(385)热电阻 -100℃～100℃
#define DAME3000_RTD_PT100_385_N0_P100          0x22	// Pt100(385)热电阻    0℃～100℃
#define DAME3000_RTD_PT100_385_N0_P200          0x23	// Pt100(385)热电阻    0℃～200℃
#define DAME3000_RTD_PT100_385_N0_P600          0x24	// Pt100(385)热电阻    0℃～600℃
#define DAME3000_RTD_PT100_3916_N200_P850       0x25	// Pt100(3916)热电阻-200℃～850℃
#define DAME3000_RTD_PT100_3916_N100_P100       0x26	// Pt100(3916)热电阻-100℃～100℃
#define DAME3000_RTD_PT100_3916_N0_P100         0x27	// Pt100(3916)热电阻   0℃～100℃
#define DAME3000_RTD_PT100_3916_N0_P200         0x28	// Pt100(3916)热电阻   0℃～200℃
#define DAME3000_RTD_PT100_3916_N0_P600         0x29	// Pt100(3916)热电阻   0℃～600℃
#define DAME3000_RTD_PT1000						0x30	// Pt1000热电阻     -200℃～850℃
#define DAME3000_RTD_BA1						0x42	// BA1热电阻        -200℃～650℃
#define DAME3000_RTD_BA2						0x43	// BA2热电阻        -200℃～650℃
#define DAME3000_RTD_G53						0x44	// G53热电阻         -50℃～150℃
#define DAME3000_RTD_Ni50						0x45	// Ni50热电阻        100℃～
#define DAME3000_RTD_Ni508						0x46	// Ni508热电阻         0℃～100℃
#define DAME3000_RTD_Ni1000						0x47	// Ni1000热电阻      -60℃～160℃

// 模拟量输入类型(热电偶类型) 供DAME3000_SetModeAD函数中的nADMode参数使用
#define DAME3000_THERMOCOUPLE_J					0x10	// J型热电偶			0℃～1200℃
#define DAME3000_THERMOCOUPLE_K					0x11	// K型热电偶			0℃～1300℃
#define DAME3000_THERMOCOUPLE_T					0x12	// T型热电偶			-200℃～400℃
#define DAME3000_THERMOCOUPLE_E					0x13	// E型热电偶			0℃～1000℃
#define DAME3000_THERMOCOUPLE_R					0x14	// R型热电偶		  500℃～1700℃
#define DAME3000_THERMOCOUPLE_S					0x15	// S型热电偶		  500℃～1768℃
#define DAME3000_THERMOCOUPLE_B					0x16	// B型热电偶		  500℃～1800℃
#define DAME3000_THERMOCOUPLE_N					0x17	// N型热电偶			0℃～1300℃
#define DAME3000_THERMOCOUPLE_C					0x18	// C型热电偶			0℃～2090℃

// 数字量输出类型使用
#define DAME3000_OUTPUT_TYPE_DIGIT				0		// 数字量输出
#define DAME3000_OUTPUT_TYPE_PULSE				1		// 脉冲输出

// 数字量输入类型 供DAME3000_SetModeCNT函数中的lCNTMode参数使用
#define	DAME3000_DI_MODE_CNT_RISING				1		// 上升沿计数
#define	DAME3000_DI_MODE_CNT_FALLING			0		// 下降沿计数

// ****************** 计数器参数配置结构体 ******************************
typedef struct _DAME3000_PARA_CNT			// 基于各通道的计数器参数结构体
{
	LONG WorkMode;					// 计数器/频率工作模式
	LONG FreqBuildTime;				// 测频器建立时间, 单位: s
	LONG InputMode;					// 计数器/频率输入方式	0: 非隔离	1: 隔离
	LONG InitVal;					// 计数器初始值
	LONG MaxVal;					// 计数器最大值
	LONG GateSts;					// 门槛值状态(计数模式)
} DAME3000_PARA_CNT, *PDAME3000_PARA_CNT;

typedef struct _DAME3000_CNT_ALARM
{
	LONG AlarmMode;					// 报警方式	
	LONG EnableAlarm0;				// 0通道报警使能
	LONG EnableAlarm1;				// 1通道报警使能
	LONG Alarm0Val;					// 0通道报警值
	LONG Alarm1Val;					// 1通道报警值
	LONG Alarm0HiHiVal;				// 0通道上上限(Hi-Hi)报警值, 报警方式1有效
} DAME3000_CNT_ALARM, *PDAME3000_CNT_ALARM;

typedef struct _DAME3000_PARA_FILTER		// 用于计数器滤波的参数结构体
{
	LONG TrigLevelHigh;				// 触发高电平(非隔离输入)
	LONG TrigLevelLow;				// 触发低电平(非隔离输入)
	LONG MinWidthHigh;				// 高电平最小输入信号宽度
	LONG MinWidthLow;				// 低电平最小输入信号宽度
	LONG bEnableFilter;				// 使能滤波
} DAME3000_PARA_FILTER, *PDAME3000_PARA_FILTER;


typedef struct _DAME3000_CNT_STATUS			// 计数器硬件参数状态结构体
{
	LONG WorkMode;					// 计数器/频率工作模式
	LONG FreqBuildTime;				// 测频器建立时间, 单位: s
	LONG InputMode;					// 计数器/频率输入方式	0: 非隔离	1: 隔离
	LONG bCNTSts;					// 计数器的状态
	LONG bFilterSts;				// 计数器的滤波状态
	LONG MinWidthHigh;				// 高电平最小输入信号宽度
	LONG MinWidthLow;				// 低电平最小输入信号宽度
	LONG TrigLevelHigh;				// 触发高电平(非隔离输入)
	LONG TrigLevelLow;				// 触发低电平(非隔离输入)
	LONG GateSts;					// 门槛值设置状态(计数模式)
	LONG MaxVal;					// 计数器最大值
	LONG InitVal;					// 计数器初始值
	LONG bOverflowSts;				// 计数器溢出状态
	LONG AlarmMode;					// 计数器报警方式
	LONG EnableAlarm0;				// 计数器0报警使能状态
	LONG EnableAlarm1;				// 计数器1报警使能状态
	LONG Alarm0Val;					// 0通道报警值
	LONG Alarm1Val;					// 1通道报警值
	LONG Alarm0HiHiVal;				// 0通道上上限(Hi-Hi)报警值, 报警方式1有效
	LONG bDO0;						// DO0
	LONG bDO1;						// DO1
} DAME3000_CNT_STATUS, *PDAME3000_CNT_STATUS;

//########################## 计数器 ###################################
// 模块的工作模式 供DAME3000_SetDevWorkMode函数中的lMode参数使用
#define DAME3000_WORKMODE_CNT					0x00 // 计数器
#define DAME3000_WORKMODE_FREQ					0x01 // 频率器

// 计数器/频率的输入方式 信号模式 供DAME3000_SetInputMode函数中的lInputMode参数使用
#define DAME3000_UNISOLATED						0x00 // 非隔离
#define DAME3000_ISOLATED						0x01 // 隔离

// 门槛值状态
#define DAME3000_GATE_LOW						0x00 // 门槛值为低电平
#define DAME3000_GATE_HIGH						0x01 // 门槛值为高电平
#define DAME3000_GATE_NULL						0x02 // 门槛值无效

// 报警方式
#define CNT_ALARM_MODE0							0x00 // 报警方式0
#define CNT_ALARM_MODE1							0x01 // 报警方式1

// 报警方式0使能
#define CNT_ALAMODE0_DISABLE					0x00 // 报警方式0禁止报警
#define CNT_ALAMODE0_ENABLE						0x01 // 报警方式0允许报警

// 报警方式1使能
#define CNT_ALAMODE1_DISEN						0x00 // 报警方式1 计数器0 禁止报警
#define CNT_ALAMODE1_MOMENT						0x01 // 报警方式1 计数器0 瞬间报警允许
#define CNT_ALAMODE1_LATCH						0x02 // 报警方式1 计数器0 闭锁报警允许

// 滤波器状态使能
#define DAME3000_FILTER_DISABLE					0x00 // 禁止滤波器
#define DAME3000_FILTER_ENABLE					0x01 // 允许滤波器

// 设备网络信息
typedef struct _DEVICE_NET_INFO
{
	char    szIP[16];					// IP地址, // IP地址, "192.168.2.70"
	char	SubnetMask[16];				// 子网掩码, "255.255.255.255"
	char	Gateway[16];				// 网关, "192.168.2.1"
	char	MAC[20];					// 网卡物理地址,  "00-01-02-03-04-05",用户一般不可修改
	LONG	lTCPPort;					// TCP端口号
	LONG    lHTTPPort;					// HTTP端口号
	LONG	lUDPPort;					// UDP端口号
	LONG	lMode;						// 连接模式(0: 静态模式  1: DHCP动态模式)
	char	chDevName[32];				// Device self name
}DEVICE_NET_INFO, *PDEVICE_NET_INFO;


#ifndef _DAME3000_DRIVER_
#define DEVAPI	__declspec(dllimport)
#else 
#define DEVAPI  __declspec(dllexport)
#endif

#ifdef __cplusplus
extern "C" {
#endif
	//####################### 查询模块设备是否在线(DHCP) #######################
	int  DEVAPI FAR PASCAL  DAME3000_SearchDevice(						// 创建设备
									char	 szIP[],					// 设备IP列表
									LONG	 lPort,						// UDP端口
									PLONG	 plCount,					// 设备数量
									LONG	 lSendTimeout,				// 发送数据的超时间隔 
									LONG	 lRcvTimeout);				// 接收数据的超时间隔																			  
	
	//####################### 设备对象管理函数 #################################
	HANDLE  DEVAPI FAR PASCAL  DAME3000_CreateDevice(					// 创建设备
									char	 szIP[],					// 设备IP(如"192.168.1.2")
									LONG	 lPort,						// TCP端口
									LONG	 lSendTimeout,				// 发送数据的超时间隔 
									LONG	 lRcvTimeout);				// 接收数据的超时间隔																			  
	
	BOOL DEVAPI	FAR	PASCAL  DAME3000_ReleaseDevice(HANDLE hDevice);		// 释放设备对象
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetDeviceVersion(					// 取得设备版本信息
									HANDLE	 hDevice,					// 设备句柄
									char	 szVersion[]);				// 设备版本信息
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetNetworkConfig(					// 获得设备的网络配置信息
									HANDLE	 hDevice,					// 设备句柄
									PDEVICE_NET_INFO pNetInfo); 		// 网络配置信息
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetNetworkConfigEx(				// 获得设备的网络配置信息
									HANDLE	hDevice,					// 设备句柄
									char	szIP[16],					// IP地址, // IP地址, "192.168.2.70"
									char	SubnetMask[16],				// 子网掩码, "255.255.255.255"
									char	Gateway[16],				// 网关, "192.168.2.1"
									char	MAC[20],					// 网卡物理地址,  "00-01-02-03-04-05",用户一般不可修改
									PLONG	lpTCPPort,					// TCP端口号
									PLONG	lpHTTPPort,					// HTTP端口号
									PLONG	lpUDPPort,					// UDP端口号
									PLONG	lpMode);					// 连接模式(0: 静态模式  1: DHCP动态模式)

	BOOL DEVAPI FAR PASCAL  DAME3000_SetNetworkConfig(					// 设置设备的网络配置信息
									HANDLE	 hDevice,					// 设备句柄
									PDEVICE_NET_INFO NetInfo);			// 网络配置信息

	BOOL DEVAPI FAR PASCAL  DAME3000_SetNetworkConfigEx(				// 设置设备的网络配置信息
									HANDLE	hDevice,					// 设备句柄
									char	szIP[16],					// IP地址, // IP地址, "192.168.2.70"
									char	SubnetMask[16],				// 子网掩码, "255.255.255.255"
									char	Gateway[16],				// 网关, "192.168.2.1"
									char	MAC[20],					// 网卡物理地址,  "00-01-02-03-04-05",用户一般不可修改
									LONG	lTCPPort,					// TCP端口号
									LONG	lHTTPPort,					// HTTP端口号
									LONG	lUDPPort,					// UDP端口号
									LONG	lMode);						// 连接模式(0: 静态模式  1: DHCP动态模式)

	BOOL DEVAPI	FAR	PASCAL  DAME3000_SaveIPAddress(char szIP[]);		// 保存IP到注册表
	
	BOOL DEVAPI	FAR	PASCAL  DAME3000_LoadIPAddress(char szIP[]);		// 载入IP到应用程序
	
	//################################### AD 函数 ####################################
	BOOL DEVAPI FAR PASCAL  DAME3000_ReadDeviceAD(						// 获得模拟量输入值
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lADValue[],				// 返回的AD数据
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetModeAD(							// 获得模拟量输入模式
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lADMode[],					// 返回的各个通道的AD模式
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SetModeAD(							// 设置模拟量输入模式
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lADMode[],					// 设置的AD模式(每个通道可以单独设置量程)
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetGroundModeAD(					// 获得模拟量接地模式
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lADGndMode[],				// 返回的各个通道的AD接地模式
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SetGroundModeAD(					// 设置模拟量接地模式
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lADGndMode[],				// 设置的AD接地模式(每个通道可以单独设置)
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SetLowLimitVal(					// 设置下限报警值
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lLowVal[],					// 下限报警值
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetLowLimitVal(					// 获得报警下限值
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lLowLimit[],				// 获得的下限值
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SetHighLimitVal(					// 设置上限报警值
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lHighVal[],				// 报警上限值
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetHighLimitVal(					// 获得报警上限值
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lHighLimit[],				// 报警上限值
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetAlarmPulse(						// 报警输出值
									HANDLE	 hDevice,					// 设备句柄
									PLONG	 lpAlarmValue);				// 报警输出电平
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SetAlarmPulse(						// 设置模拟量输入报警电平
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lAlarmValue);				// 报警输出电平
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetAlarmSts(						// 获得报警状态
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lStatus[],					// 报警状态
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	//################################### DA 函数 ####################################
	BOOL DEVAPI	FAR	PASCAL	DAME3000_GetDeviceDAVal(					// 回读DA输出值
									HANDLE	hDevice,					// 设备对象句柄
									PLONG	lpDAValue,          		// DA输出当前值
									LONG	lChannel = 0);				// 通道号

	BOOL DEVAPI	FAR	PASCAL	DAME3000_WriteDeviceDA(						// 设定单通道DA
									HANDLE	 hDevice,					// 设备对象句柄
									LONG	 lDAData,					// DA输出值
									LONG	 lChannel = 0);      		// 通道号
	 
	BOOL DEVAPI	FAR PASCAL	DAME3000_GetOutPutRangeDA(					// 读取模拟量输出量程
									HANDLE	 hDevice,					// 设备对象句柄
									PLONG	 lpRange,					// 输出量程
									LONG	 lChannel = 0);				// 通道号
 
	BOOL DEVAPI	FAR PASCAL	DAME3000_SetOutPutRangeDA(					// 设置模拟量输出量程
									HANDLE	 hDevice,					// 设备对象句柄
									LONG	 lRange,					// 输出量程
									LONG	 lChannel = 0);				// 通道号
	 
	BOOL DEVAPI	FAR PASCAL	DAME3000_GetPowerOnValueDA(					// 获得DA上电值
									HANDLE	 hDevice,					// 设备对象句柄
									PLONG	 lpPowerOnVal,       		// 上电值
									LONG	 lChannel = 0);				// 通道号
 
	BOOL DEVAPI	FAR PASCAL	DAME3000_SetPowerOnValueDA(					// 设置DA上电值
									HANDLE	hDevice,					// 设备对象句柄
									LONG	lPowerOnVal,				// 上电值
									LONG	lChannel = 0);				// 通道号

	BOOL DEVAPI	FAR PASCAL	DAME3000_GetSafeValueDA(					// 获得DA安全值
									HANDLE	 hDevice,					// 设备对象句柄
									PLONG	 lpSafeVal,					// 安全值
									LONG	 lChannel = 0);				// 通道号
 
	BOOL DEVAPI	FAR PASCAL	DAME3000_SetSafeValueDA(					// 设置DA安全值
									HANDLE	 hDevice,					// 设备对象句柄
									LONG	 lSafeVal,					// 安全值
									LONG	 lChannel = 0);				// 通道号
 
	BOOL DEVAPI	FAR PASCAL	DAME3000_GetSlopeDA(						// 读模拟量输出斜率
									HANDLE	 hDevice,					// 设备对象句柄
									PLONG	 lpSlopeType,				// 输出斜率类型
									LONG	 lChannel = 0);				// 通道号
	 
	BOOL DEVAPI	FAR PASCAL	DAME3000_SetSlopeDA(						// 修改模拟量输出斜率
									HANDLE	 hDevice,					// 设备对象句柄
									LONG	 lSlopeType,				// 输出斜率类型
									LONG	 lChannel = 0);				// 通道号
	 
	//################################### DI 函数 ####################################
	BOOL DEVAPI FAR PASCAL  DAME3000_GetDeviceDI(						// 获得DI值
									HANDLE	 hDevice,					// 设备句柄
									BYTE	 byDIStatus[],				// DI状态
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetDeviceCNT(						// 获得计数值
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lCurrentVal[],				// 当前计数值
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	 
	BOOL DEVAPI FAR PASCAL  DAME3000_SetDeviceCNT(						// 设置计数初值
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lInitVal[],				// 计数初值
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	 
	BOOL DEVAPI FAR PASCAL  DAME3000_GetModeCNT(						// 获得计数方式
									HANDLE	 hDevice,					// 设备句柄
									PLONG	 lpCNTMode,					// 计数方式
									LONG	 lChannel = 0);				// 通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SetModeCNT(						// 设置计数模式 1:为上升，0:为下降沿
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lCNTMode,					// 计数方式
									LONG	 lChannel = 0);				// 通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_StartDeviceCNT(					// 开始计数
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lChannel = 0);				// 通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_StopDeviceCNT(						// 停止计数
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lChannel = 0);				// 通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetEnableStsCNT(					// 获得计数使能状态
									HANDLE	 hDevice,					// 设备句柄
									BYTE	 byCNTStatus[],				// 计数使能状态
									LONG	 lChannelCount);			// 通道个数
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetLatchEnableSts(					// 获得锁存使能状态
									HANDLE	 hDevice,					// 设备句柄
									BYTE	 byLatchStatus[],			// 锁存状态
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	 
	BOOL DEVAPI FAR PASCAL  DAME3000_StartLatch(						// 启动锁存
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lChannel = 0);				// 通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_StopLatch(							// 停止锁存
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lChannel = 0);				// 通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetLowLatchSts(					// 获得下降沿锁存状态
									HANDLE	 hDevice,					// 设备句柄
									BYTE	 byLowLatchSts[],			// 下降沿锁存状态
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	 
	BOOL DEVAPI FAR PASCAL  DAME3000_GetHiLatchSts(						// 获得上升沿锁存状态
									HANDLE	 hDevice,					// 设备句柄
									BYTE	 byHiLatchSts[],			// 上升沿锁存状态
									LONG     lFirstChannel = 0,			// 起始通道
									LONG	 lLastChannel = 0);			// 末通道号
									 
	//################################### DO 函数 ####################################
	BOOL DEVAPI FAR PASCAL  DAME3000_GetDeviceDO(						// 获得当前数字量输出
									HANDLE	 hDevice,					// 设备句柄
									BYTE     byDOSts[],					// DO状态
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	 
	BOOL DEVAPI FAR PASCAL  DAME3000_SetDeviceDO(						// 设置DO输出值
									HANDLE	 hDevice,					// 设备句柄
									BYTE	 byDOSts[],					// 设置DO输出值
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	 
	BOOL DEVAPI FAR PASCAL  DAME3000_GetDevicePulse(					// 获得脉冲输出宽度
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lLowWidth[],				// 低电平
									LONG	 lHighWidth[],				// 高电平
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SetDevicePulse(					// 设置DO脉冲输出占空比
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lLowWidth[],				// 脉冲输出低电平宽度
									LONG	 lHighWidth[],				// 脉冲输出高电平宽度	
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetPulseEnableSts(					// 获得脉冲使能状态
									HANDLE	 hDevice,					// 设备句柄
									BYTE	 byPulseStatus[],			// 脉冲输出使能状态
									LONG     lFirstChannel = 0,			// 首通道号
									LONG	 lLastChannel = 0);			// 末通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_StartDevicePulse(					// 开始数字脉冲输出
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lChannel = 0);				// 通道号
									
	BOOL DEVAPI FAR PASCAL  DAME3000_StopDevicePulse(					// 停止数字脉冲输出
									HANDLE	 hDevice,					// 设备句柄
									LONG	 lChannel = 0);				// 通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SetSafeValueDO(					// 设置DO安全值
									HANDLE	 hDevice,					// 设备句柄
									BYTE     bySafeVal[],				// 安全值
									LONG	 lLength);					// 等于数组bySafeVal的长度
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetSafeValueDO(					// 获得DO安全值
									HANDLE	 hDevice,					// 设备句柄
									BYTE     bySafeVal[],				// 安全值	
									LONG	 lLength);					// 等于数组bySafeVal的长度
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SetPowerOnValueDO(					// 设置DO上电值
									HANDLE	 hDevice,					// 设备句柄
									BYTE     byPowerOnVal[],			// 上电值
									LONG	 lLength);					// 等于数组byPowerOnVal的长度
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetPowerOnValueDO(					// 获取DO上电初始值
									HANDLE	 hDevice,					// 设备句柄
									BYTE     byPowerOnVal[],			// 上电值
									LONG	 lLength);					// 等于数组byPowerOnVal的长度

	//#############################  计数器  ###################################
	BOOL DEVAPI FAR PASCAL  DAME3000_SetCounterMode(					// 对各个计数器进行参数设置
									HANDLE   hDevice,					// 设备对象句柄
									PDAME3000_PARA_CNT pCNTPara,		// 基于各通道的计数器参数
									LONG	 lChannel = 0);				// 通道号

	BOOL DEVAPI FAR PASCAL  DAME3000_InitCounterAlarm(					// 初始化报警的工作模式
									HANDLE   hDevice,					// 设备对象句柄
									PDAME3000_CNT_ALARM pCNTAlarm);		// 报警参数设置

	BOOL DEVAPI FAR PASCAL  DAME3000_SetCounterAlarmMode(				// 设置计数器报警方式
									HANDLE	 hDevice,				    // 设备对象句柄
									LONG	 lAlarmMode);			    // 报警方式

	BOOL DEVAPI FAR PASCAL  DAME3000_GetCounterSts(						// 获得计数器设备硬件参数状态
									HANDLE	 hDevice,					// 设备对象句柄
									PDAME3000_CNT_STATUS pCNTSts,		// 返回值
									LONG	 lChannel = 0);				// 通道号

	BOOL DEVAPI	FAR	PASCAL	DAME3000_StartCounter(						// 启动计数器计数
									HANDLE	 hDevice,					// 设备对象句柄
									LONG	 lChannel = 0);				// 通道号

	BOOL DEVAPI	FAR	PASCAL	DAME3000_StopCounter(						// 停止计数器计数
									HANDLE	 hDevice,					// 设备对象句柄
									LONG	 lChannel = 0);				// 通道号

	BOOL DEVAPI FAR PASCAL  DAME3000_GetCounterCurVal(					// 取得计数器当前值
									HANDLE   hDevice,					// 设备对象句柄
									PLONG    pCNTVal,					// 计数值
									LONG     lChannel = 0);				// 通道号

	BOOL DEVAPI FAR PASCAL  DAME3000_GetFreqCurVal(						// 取得频率器当前值
									HANDLE   hDevice,					// 设备对象句柄
									PLONG    pFreqVal,					// 频率值
									LONG     lChannel = 0);				// 通道号

	BOOL DEVAPI	FAR	PASCAL	DAME3000_ResetCounter(						// 计数器值复位
									HANDLE	 hDevice,					// 设备对象句柄
									LONG	 lChannel = 0);				// 通道号

	BOOL DEVAPI	FAR	PASCAL	DAME3000_ResetAll(							// 计数器设备恢复为出厂设置
									HANDLE	 hDevice);					// 设备对象句柄

	BOOL DEVAPI FAR PASCAL  DAME3000_InitCounterFilter(					// 初始化滤波
									HANDLE   hDevice,					// 设备对象句柄
									PDAME3000_PARA_FILTER pFilter,		// 滤波参数
									LONG	 lChannel = 0);				// 通道号

	BOOL DEVAPI FAR PASCAL  DAME3000_EnableFilter(						// 使能滤波器状态
									HANDLE   hDevice,					// 设备对象句柄
									BOOL	 bEnable,					// 使能滤波
									LONG	 lChannel = 0);				// 通道号

	BOOL DEVAPI FAR PASCAL  DAME3000_SetAlarmDO(						// 设置报警开关量
									HANDLE   hDevice,					// 设备对象句柄
									LONG	 bDO,						// DO
									LONG	 lChannel = 0);				// 通道号


	BOOL DEVAPI FAR PASCAL  DAME3000_GetCounterAlarmSts(				// 获得DO及报警状态
									HANDLE   hDevice,					// 设备对象句柄
									PLONG    plEnableAlarm,				// 计数器报警状态
									PLONG    pbDO,						// DO
									LONG	 lChannel = 0);				// 通道号

	//################################# 看门狗 函数 ##################################
	BOOL DEVAPI FAR PASCAL  DAME3000_HostIsOK(							// Host Is OK
									HANDLE	 hDevice);					// 设备对象句柄
	
	BOOL DEVAPI FAR PASCAL  DAME3000_EnableWatchdog(					// 使能看门狗
									HANDLE	 hDevice);					// 设备对象句柄
	
	BOOL DEVAPI FAR PASCAL  DAME3000_CloseWatchdog(						// 关闭看门狗
									HANDLE	 hDevice);					// 设备对象句柄
	
	BOOL DEVAPI FAR PASCAL  DAME3000_GetWatchdogSts(					// 获得看门狗状态
									HANDLE	 hDevice,					// 设备对象句柄
									PLONG	 lpDogStatus);				// 看门狗状态
	
	BOOL DEVAPI FAR PASCAL  DAME3000_ResetWatchdog(						// 复位看门狗
									HANDLE	 hDevice);					// 设备对象句柄
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SetWatchdogTimeoutVal(				// 设置看门狗溢出值
									HANDLE	 hDevice,					// 设备对象句柄
									LONG	 lTimeOutVal);				// 超时时间
	
	//##################################### DIGIT LED 设置函数 #################################
	BOOL DEVAPI FAR PASCAL  DAME3000_GetDLedMode(						// 获得显示模式请求
									HANDLE   hDevice,					// 设备对象句柄
									PLONG    lpDispMode);			// 显示模式, 0x00：温度格式,0x01:欧姆值

	BOOL DEVAPI FAR PASCAL  DAME3000_SetDLedMode(						// 修改显示模式请求
									HANDLE   hDevice,					// 设备对象句柄
									LONG     lDispMode);				// 0x01：温度格式,0x02:欧姆值

	BOOL DEVAPI FAR PASCAL  DAME3000_GetDLedDispChannel(				// 获得LED显示通道号
									HANDLE   hDevice,					// 设备对象句柄
									PLONG    lpChannel);				// 通道号,lpChannel = 0xFF:主机控制显示

	BOOL DEVAPI FAR PASCAL  DAME3000_SetDLedDispChannel(				// 设置LED显示通道号
									HANDLE   hDevice,					// 设备对象句柄
									LONG     lChannel = 0);				// 通道号,lpChannel = 0xFF:主机控制显示
		
	BOOL DEVAPI FAR PASCAL  DAME3000_SetDLedValue(						// 主机控制显示值
									HANDLE   hDevice,					// 设备对象句柄
									LPCTSTR  strWriteBuf,				// 显示的字符串
									LONG     llength);					// 数据长度


	//################################# 精度校验(内部命令) ####################################
	BOOL DEVAPI FAR PASCAL  DAME3000_SlopeProofread(					// 斜率校正
									HANDLE	 hDevice,					// 设备句柄
									FLOAT	 fSetValue);				// 设置的值
	
	BOOL DEVAPI FAR PASCAL  DAME3000_SlopeProofreadDA(					// 模拟量输出斜率校正
									HANDLE	 hDevice,					// 设备句柄
									FLOAT	 fSetValue,					// 设置的值
									LONG	 lChannel = 0);				// 通道号
	
	BOOL DEVAPI FAR PASCAL  DAME3000_ZeroProofread(						// 零点校正
									HANDLE	 hDevice,					// 设备句柄
									FLOAT	 fSetValue);				// 设置的值
	
	//#########################################################################################
	//********************************* 直接命令行 *********************************
	int	DEVAPI	FAR	PASCAL	DAME3000_WriteDeviceChar(
									HANDLE	 hDevice, 					// 设备句柄
									char*	 szwriteBuffer,				// 写入的数据
									LONG	 llength);					// 直接写设备

	int	DEVAPI	FAR	PASCAL	DAME3000_ReadDeviceChar(
									HANDLE   hDevice, 					// 设备句柄
									char*	 szreadBuffer,				// 读取的数据
									LONG	 llength);					// 直接读设备

	//#########################################################################################
	//********************************* 通用命令 *************************************
	BOOL DEVAPI FAR PASCAL ReadCoils(									// 读继电器状态
									HANDLE	 hDevice,  					// 设备句柄
									int		 addr,						// 功能地址
									int		 len, 						// 读取长度
									BYTE	 bCoilsFlag[]);				// 读取的继电器状态
		
	BOOL DEVAPI FAR PASCAL ReadDiscretes(								// 读开关量输入
									HANDLE	 hDevice,  					// 设备句柄
									int		 addr, 						// 功能地址
									int		 len, 						// 读取长度
									BYTE	 bDIState[]);				// 读取的DI状态

	BOOL DEVAPI FAR PASCAL ReadMultiRegs(								// 读保持寄存器
									HANDLE	 hDevice,  					// 设备句柄
									int		 addr, 						// 功能地址
									int		 len, 						// 读取长度
									BYTE	 buf[]);					// 读取的数据
	
	BOOL DEVAPI FAR PASCAL ReadInputRegs(								// 读输入寄存器
									HANDLE	 hDevice,  					// 设备句柄
									int		 addr, 						// 功能地址
									int		 len, 						// 读取长度
									BYTE	 buf[]);					// 读取的数据

	BOOL DEVAPI FAR PASCAL WriteCoil(									// 设置单个继电器
									HANDLE	 hDevice,  					// 设备句柄
									int		 addr, 						// 功能地址
									BYTE	 status); 					// 写入的数据
 
	BOOL DEVAPI FAR PASCAL WriteSingleReg(								// 设置单个保持寄存器
									HANDLE	 hDevice,  					// 设备句柄
									int		 addr, 						// 功能地址
									short	 val);  					// 写入的数据
 
	BOOL DEVAPI FAR PASCAL ForceMultiCoils(								// 设置多个继电器
									HANDLE	 hDevice,  					// 设备句柄
									int		 addr, 						// 功能地址
									int		 len, 						// 读取长度
									BYTE	 bDOState[]);  				// 写入的数据

	BOOL DEVAPI FAR PASCAL WriteMultiRegs(								// 设置多个保持寄存器
									HANDLE	 hDevice,  					// 设备句柄
									int		 addr, 						// 功能地址
									int		 len, 						// 读取长度
									BYTE	 buf[]);  					// 写入的数据

	BOOL DEVAPI FAR PASCAL ReadRegFile(									// 读取文件记录
									HANDLE	 hDevice,  					// 设备句柄
									int		 index,						// 文件索引号
									int		 addr, 						// 功能地址
									int		 len, 						// 读取长度
									BYTE	 buf[]);  					// 读取的数据

	BOOL DEVAPI FAR PASCAL WriteRegFile(								// 写文件记录
									HANDLE	 hDevice,  					// 设备句柄
									int		 index, 					// 文件索引号
									int		 addr, 						// 功能地址
									int		 len,						// 读取长度
									BYTE	 buf[]);  					// 写入的数据
	
	BOOL DEVAPI FAR PASCAL DAME3000_GetFileMode( // 读文件读写保护控制位
										HANDLE	hDevice,
										PLONG	pFileMode,
										LONG	nFileIndex,
										LONG	Address);

	BOOL DEVAPI FAR PASCAL DAME3000_SetFileMode( // 设置文件读写保护控制位
										HANDLE	hDevice,
										LONG	FileMode,
										LONG	nFileIndex,
										LONG	Address);

#ifdef __cplusplus
}
#endif
#endif

//// 自动包含驱动函数导入库
//#ifndef _DAME3000_DRIVER_
//#ifndef _WIN64
//#pragma comment(lib, "DAME3000_32.lib")
//#pragma message("======== Welcome to use our art company's products!")
//#pragma message("======== Automatically linking with DAME3000_32.dll...")
//#pragma message("======== Successfully linked with DAME3000_32.dll")
//#else
//#pragma comment(lib, "DAME3000_64.lib")
//#pragma message("======== Welcome to use our art company's products!")
//#pragma message("======== Automatically linking with DAME3000_64.dll...")
//#pragma message("======== Successfully linked with DAME3000_64.dll")
//#endif // _WIN64
//#endif // _DAME3000_DRIVER_
